Дано
натуральное число n. Удалить в этом
числе все цифры 3 и 9, оставив порядок остальных цифр прежним.
Например,
число 539013 преобразуется в 501.
Вход. Одно
натуральное число n (1 ≤ n ≤ 1018).
Выход. Удалите
из числа n все тройки и девятки,
сохранив относительный порядок остальных цифр.
Пример входа |
Пример выхода |
539013 |
501 |
строки
Входное
число n читаем в переменную s типа string. В строке s следует
удалить цифры 3 и 9. Рассмотрим два подхода решения задачи:
1.
Проходим по строке и удаляем символы ‘3’ и ‘9’ при помощи метода erase;
2.
Объявим пустую строку res. Проходим
по входной строке s и приписываем в
конец res каждый символ s[i], не равный ‘3’ и ‘9’.
Реализация алгоритма – char массив
Объявим
символьный массив s.
char s[20];
int i, j;
Читаем входную строку.
gets(s);
Устанавливаем указатели i и j на начало строки.
j = 0;
for(i = 0; i
< strlen(s); i++)
Каждый символ s[j], не равный ‘3’ и ‘9’,
копируем s[j].
if (s[i] != '3'
&& s[i] != '9') s[j++] = s[i];
Ставим 0 байт в конце результирующей строки.
s[j] = 0;
Выводим ответ.
puts(s);
Реализация алгоритма – форматированный
ввод
Объявим
входной массив s, результирующий res и вспомогательный temp.
char s[20], res[20], temp[20];
int i, j;
Читаем префикс подстроки, состоящей из цифр 3 и 9.
scanf("%[39]", temp);
Читаем последовательность символов, среди которых нет
цифр 3 и 9.
while (scanf("%[^39]", temp) == 1)
{
Конкатинируем temp к res.
strcat(res, temp);
Читаем последовательность символов, состоящих из цифр 3
и 9.
scanf("%[39]", temp);
}
Выводим ответ.
puts(res);
Реализация алгоритма – циклы
#include <stdio.h>
long long
i, n, d, ten, res;
int main(void)
{
scanf("%lld",&n);
res = 0;
ten = 1;
while(n > 0)
{
d = n % 10;
if (d != 3 && d != 9)
{
res = res + ten *
d;
ten = ten * 10;
}
n = n / 10;
}
if (res != 0) printf("%lld\n",res);
return 0;
}
Реализация алгоритма – C++
Объявим
рабочую строку s.
string s;
Читаем
строку.
cin >> s;
Проходим по строке s,
удаляем символы ‘3’ и ‘9’ при помощи метода erase.
for(int i = 0; i < s.size();
i++)
if (s[i] == '3' ||
s[i] == '9')
{
s.erase(s.begin()+i);
i--;
}
Выводим результирующую строку.
cout << s;
Реализация алгоритма – C++, второе решение
#include <iostream>
#include <string>
using namespace std;
string s, res;
int main(void)
{
cin
>> s;
res = "";
for(int i = 0; i <
s.size(); i++)
if (s[i] != '3'
&& s[i] != '9') res = res + s[i];
cout
<< res << endl;
return 0;
}
Java реализация
import java.util.*;
public class Main
{
public static void main(String[] args)
{
Scanner con = new Scanner(System.in);
String s = con.nextLine();
s = s.replaceAll("[39]","");
System.out.println(s);
con.close();
}
}